home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / s_to_z / winmac32 / srmain.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-09-15  |  15.8 KB  |  578 lines

  1. {$I SRCOMOPT.INC}
  2. unit Srmain;
  3.  
  4. interface
  5.  
  6. uses Windows, Classes, Graphics, Forms, Controls, WMacro,
  7.   StdCtrls, SysUtils, Messages, Dialogs, ComCtrls, Grids;
  8.  
  9. type
  10.   TSuperRecorder = class(TForm)
  11.     MacroSet1: TMacroSet;
  12.     Label2: TLabel;
  13.     gbGlobalSettings: TGroupBox;
  14.     SaveBtn: TButton;
  15.     LoadBtn: TButton;
  16.     Merge: TCheckBox;
  17.     RecordKeyMsg: TLabel;
  18.     ScrapMacroKeyMsg: TLabel;
  19.     CancelKeyMsg: TLabel;
  20.     Memo1: TMemo;
  21.     PauseKeyMsg: TLabel;
  22.     DeleteBtn: TButton;
  23.     gbMouseRelevant: TGroupBox;
  24.     MousePointer: TRadioButton;
  25.     MouseWindow: TRadioButton;
  26.     MouseScreen: TRadioButton;
  27.     OpenDialog1: TOpenDialog;
  28.     SaveDialog1: TSaveDialog;
  29.     btSendKeys: TButton;
  30.     edSendKeys: TEdit;
  31.     btAppActivate: TButton;
  32.     gbToggles: TGroupBox;
  33.     CapsLockButton: TButton;
  34.     NumlockButton: TButton;
  35.     ScrollLockButton: TButton;
  36.     edAppActivate: TEdit;
  37.     StringGrid1: TStringGrid;
  38.     CancelCheck: TCheckBox;
  39.     FastPlay: TCheckBox;
  40.     SysWide: TCheckBox;
  41.     gbMouseMessages: TGroupBox;
  42.     MouseNone: TRadioButton;
  43.     MouseClicks: TRadioButton;
  44.     MouseEverything: TRadioButton;
  45.     btApply: TButton;
  46.     gbNewMacro: TGroupBox;
  47.     MacroKeyComboBox1: TMacroKeyComboBox;
  48.     edMacroName: TEdit;
  49.     btCreateKeyMacro: TButton;
  50.     btCreateCodeMacro: TButton;
  51.     Label7: TLabel;
  52.     Label8: TLabel;
  53.     StatusBar1: TStatusBar;
  54.     procedure FastPlayClick(Sender: TObject);
  55.     procedure SysWideClick(Sender: TObject);
  56.     procedure MouseNoneClick(Sender: TObject);
  57.     procedure MouseClicksClick(Sender: TObject);
  58.     procedure MouseEverythingClick(Sender: TObject);
  59.     procedure btCreateKeyMacroClick(Sender: TObject);
  60.     procedure btApplyClick(Sender: TObject);
  61.     procedure FormCreate(Sender: TObject);
  62.     procedure MacroSet1Played(Sender: TObject; State: TUserMacroEngineState);
  63.     procedure SaveBtnClick(Sender: TObject);
  64.     procedure LoadBtnClick(Sender: TObject);
  65.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  66.     procedure btCreateCodeMacroClick(Sender: TObject);
  67.     procedure CancelCheckClick(Sender: TObject);
  68.     procedure DeleteBtnClick(Sender: TObject);
  69.     procedure MousePointerClick(Sender: TObject);
  70.     procedure MouseWindowClick(Sender: TObject);
  71.     procedure MouseScreenClick(Sender: TObject);
  72.     procedure btSendKeysClick(Sender: TObject);
  73.     procedure MacroSet1Assigned(Sender: TObject; Macro: Pointer);
  74.     procedure btAppActivateClick(Sender: TObject);
  75.     procedure CapsLockButtonClick(Sender: TObject);
  76.     procedure ScrollLockButtonClick(Sender: TObject);
  77.     procedure NumlockButtonClick(Sender: TObject);
  78.     procedure FormActivate(Sender: TObject);
  79.   private
  80.     { Private declarations }
  81.   public
  82.     { Public declarations }
  83.   end;
  84.  
  85. var
  86.   SuperRecorder: TSuperRecorder;
  87.   OurWindow : HWND;
  88.   OldCursor,BIGPOINT : HCursor;
  89.  
  90. implementation
  91. const
  92.   OffOn : array[boolean] of string = ('OFF','ON ');
  93.   SlowMouseVDelta = 5;
  94.   SlowMouseHDelta = 5;
  95.   FastMouseVDelta = 30;
  96.   FastMouseHDelta = 30;
  97.  
  98. {$R *.DFM}
  99. {$R BIGPOINT.RES}
  100.  
  101. procedure TSuperRecorder.FastPlayClick(Sender: TObject);
  102. begin
  103.   MacroSet1.FastPlayback:=FastPlay.Checked;
  104. end;
  105.  
  106. procedure TSuperRecorder.SysWideClick(Sender: TObject);
  107. begin
  108.   MacroSet1.SystemWide:=SysWide.Checked;
  109. end;
  110.  
  111. procedure TSuperRecorder.MouseNoneClick(Sender: TObject);
  112. begin
  113.   If MouseNone.Checked then MacroSet1.RecordMouse:=RMIgnore;
  114. end;
  115.  
  116. procedure TSuperRecorder.MouseClicksClick(Sender: TObject);
  117. begin
  118.   If MouseClicks.Checked then MacroSet1.RecordMouse:=RMClicksAndDrags;
  119. end;
  120.  
  121. procedure TSuperRecorder.MouseEverythingClick(Sender: TObject);
  122. begin
  123.   If MouseEverything.Checked then MacroSet1.RecordMouse:=RMAll;
  124. end;
  125.  
  126. procedure TSuperRecorder.btCreateKeyMacroClick(Sender: TObject);
  127. begin
  128.   try
  129.     With MacroSet1, MacroKeyComboBox1 do
  130.       If (MKey>0) then Add(MKey,ScrapMacro,edMacroName.Text,nil);
  131.   except
  132.   on Exception Do MessageBox(0,'An error occurred while adding the key macro','',MB_APPLMODAL);
  133.   end;
  134. end;
  135.  
  136. procedure TSuperRecorder.btApplyClick(Sender: TObject);
  137. begin
  138.   With MacroSet1 do begin
  139.     If MacrosOn then MacrosOff;
  140.     MacrosOn;
  141.   end;
  142.   
  143.   MacroSet1Assigned(Sender,nil);
  144. end;
  145.  
  146. function GetTopLevelWindow(Handle : HWND) : HWND;
  147. begin
  148.   while (GetParent(Handle)<>0) do Handle:=GetParent(Handle);
  149.   result:=Handle;
  150. end;
  151.  
  152. procedure ExampleCodeMacroProcedure; export;
  153. begin
  154.   MessageBox(0,'Example Code Macro Procedure','',MB_APPLMODAL);
  155. end;
  156.  
  157. Procedure RunProg(const Prog : Pchar);
  158. begin
  159.   WinExec(Prog,SW_SHOWNORMAL);
  160. end;
  161.  
  162. procedure RunCalc; export;
  163. begin
  164.   RunProg('CALC.EXE');
  165. end;
  166.  
  167. procedure RunNotePad; export;
  168. begin
  169.   RunProg('NOTEPAD.EXE');
  170. end;
  171.  
  172. procedure RunCalendar; export;
  173. begin
  174.   RunProg('CALENDAR.EXE');
  175. end;
  176.  
  177. procedure RunClock; export;
  178. begin
  179.   RunProg('CLOCK.EXE');
  180. end;
  181.  
  182. procedure MoveMouseUp; export;
  183. var
  184.   MousePos : TPoint;
  185. begin
  186.   GetCursorPos(MousePos);
  187.   MousePos.y:=MousePos.y-SlowMouseVDelta;
  188.   If (MousePos.y<0) then MousePos.y:=0;
  189.   SetCursorPos(MousePos.x,MousePos.y);
  190. end;
  191.  
  192. procedure MoveMouseLeft; export;
  193. var
  194.   MousePos : TPoint;
  195. begin
  196.   GetCursorPos(MousePos);
  197.   MousePos.x:=MousePos.x-SlowMouseHDelta;
  198.   If (MousePos.x<0) then MousePos.x:=0;
  199.   SetCursorPos(MousePos.x,MousePos.y);
  200. end;
  201.  
  202. procedure MoveMouseRight; export;
  203. var
  204.   MousePos : TPoint;
  205. begin
  206.   GetCursorPos(MousePos);
  207.   MousePos.x:=MousePos.x+SlowMouseHDelta;
  208.   SetCursorPos(MousePos.x,MousePos.y);
  209. end;
  210.  
  211. procedure MoveMouseDown; export;
  212. var
  213.   MousePos : TPoint;
  214. begin
  215.   GetCursorPos(MousePos);
  216.   MousePos.y:=MousePos.y+SlowMouseVDelta;
  217.   SetCursorPos(MousePos.x,MousePos.y);
  218. end;
  219.  
  220. procedure MoveMouseUpFast; export;
  221. var
  222.   MousePos : TPoint;
  223. begin
  224.   GetCursorPos(MousePos);
  225.   MousePos.y:=MousePos.y-FastMouseVDelta;
  226.   If (MousePos.y<0) then MousePos.y:=0;
  227.   SetCursorPos(MousePos.x,MousePos.y);
  228. end;
  229.  
  230. procedure MoveMouseLeftFast; export;
  231. var
  232.   MousePos : TPoint;
  233. begin
  234.   GetCursorPos(MousePos);
  235.   MousePos.x:=MousePos.x-FastMouseHDelta;
  236.   If (MousePos.x<0) then MousePos.x:=0;
  237.   SetCursorPos(MousePos.x,MousePos.y);
  238. end;
  239.  
  240. procedure MoveMouseRightFast; export;
  241. var
  242.   MousePos : TPoint;
  243. begin
  244.   GetCursorPos(MousePos);
  245.   MousePos.x:=MousePos.x+FastMouseHDelta;
  246.   SetCursorPos(MousePos.x,MousePos.y);
  247. end;
  248.  
  249. procedure MoveMouseDownFast; export;
  250. var
  251.   MousePos : TPoint;
  252. begin
  253.   GetCursorPos(MousePos);
  254.   MousePos.y:=MousePos.y+FastMouseVDelta;
  255.   SetCursorPos(MousePos.x,MousePos.y);
  256. end;
  257.  
  258. procedure MoveMouseUpperLeft; export;
  259. var
  260.   MousePos : TPoint;
  261. begin
  262.   With MousePos do begin
  263.     x:=0;
  264.     y:=0;
  265.   end;
  266.   SetCursorPos(MousePos.x,MousePos.y);
  267. end;
  268.  
  269. procedure MoveMouseUpperRight; export;
  270. var
  271.   MousePos : TPoint;
  272. begin
  273.   With MousePos do begin
  274.     x:=2048;
  275.     y:=0;
  276.   end;
  277.   SetCursorPos(MousePos.x,MousePos.y);
  278. end;
  279.  
  280. procedure MoveMouseLowerLeft; export;
  281. var
  282.   MousePos : TPoint;
  283.   ScreenHeight : Integer;
  284. begin
  285.   ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  286.   With MousePos do begin
  287.     x:=0;
  288.     y:=ScreenHeight;
  289.   end;
  290.   SetCursorPos(MousePos.x,MousePos.y);
  291. end;
  292.  
  293. procedure MoveMouseLowerRight; export;
  294. var
  295.   MousePos : TPoint;
  296.   ScreenWidth, ScreenHeight : Integer;
  297. begin
  298.   ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
  299.   ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  300.   With MousePos do begin
  301.     x:=ScreenWidth;
  302.     y:=ScreenHeight;
  303.   end;
  304.   SetCursorPos(MousePos.x,MousePos.y);
  305. end;
  306.  
  307. procedure MoveMouseCenter; export;
  308. var
  309.   MousePos : TPoint;
  310.   ScreenWidth, ScreenHeight : Integer;
  311. begin
  312.   ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
  313.   ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  314.   With MousePos do begin
  315.     x:=ScreenWidth div 2;
  316.     y:=ScreenHeight div 2;
  317.   end;
  318.   SetCursorPos(MousePos.x,MousePos.y);
  319. end;
  320.  
  321. procedure MagnifyPointer; export;
  322. var
  323.   CurCursor : HCursor;
  324. begin
  325.   CurCursor:=GetCursor;
  326.   If (CurCursor<>BIGPOINT) then begin
  327.     OldCursor:=CurCursor;
  328.     SetCursor(BIGPOINT);
  329.   end;
  330. end;
  331.  
  332. procedure ShrinkPointer; export;
  333. var
  334.   CurCursor : HCursor;
  335. begin
  336.   CurCursor:=GetCursor;
  337.   If (CurCursor=BIGPOINT) then
  338.     SetCursor(OldCursor);
  339. end;
  340.  
  341. procedure TypeA; far; export;
  342. begin
  343.   SuperRecorder.MacroSet1.SendText('a');
  344. end;
  345.  
  346. procedure SendKeysProc; export;
  347. const
  348.   temp : pchar = '{ESC}4{+}5~'#0;
  349. begin
  350.   SuperRecorder.MacroSet1.SendKeys(temp, False);
  351.   while (SuperRecorder.MacroSet1.MacroState=msPlayback) do Application.ProcessMessages;
  352. end;
  353.  
  354. procedure ClickLeftButton; export;
  355. var
  356.   MousePos : TPoint;
  357.   Lparam : Longint;
  358.   CurWin : HWND;
  359.   CurRect : TRect;
  360. begin
  361.   GetCursorPos(MousePos);
  362.   CurWin := WindowFromPoint(MousePos);
  363.   GetWindowRect(CurWin, CurRect);
  364.   Lparam:=MakeLong(MousePos.X-CurRect.Left, MousePos.Y-CurRect.Top);
  365.   SendMessage(CurWin,WM_LBUTTONDOWN,0,Lparam);
  366.   SendMessage(CurWin,WM_LBUTTONUP,0,Lparam);
  367. end;
  368.  
  369. procedure DoubleClickLeftButton; export;
  370. var
  371.   MousePos : TPoint;
  372.   Lparam : Longint;
  373.   CurWin : HWND;
  374.   CurRect : TRect;
  375. begin
  376.   ClickLeftButton;
  377.   GetCursorPos(MousePos);
  378.   CurWin := WindowFromPoint(MousePos);
  379.   GetWindowRect(CurWin, CurRect);
  380.   Lparam:=MakeLong(MousePos.X-CurRect.Left, MousePos.Y-CurRect.Top);
  381.   SendMessage(CurWin,WM_LBUTTONDBLCLK,0,Lparam);
  382. end;
  383.  
  384. procedure TSuperRecorder.FormCreate(Sender: TObject);
  385. begin
  386.   BIGPOINT:=LoadCursor(hInstance,pchar(255));
  387.   With MacroSet1 do begin
  388.     FastPlay.Checked:=FastPlayback;
  389.     SysWide.Checked:=SystemWide;
  390.     MouseNone.Checked:=(RecordMouse=RMIgnore);
  391.     MouseClicks.Checked:=(RecordMouse=RMClicksAndDrags);
  392.     MouseEverything.Checked:=(RecordMouse=RMAll);
  393.     MousePointer.Checked:=(MouseBase=MBPointer);
  394.     MouseWindow.Checked:=(MouseBase=MBWindow);
  395.     MouseScreen.Checked:=(MouseBase=MBScreen);
  396.     CancelCheck.Checked:=CancelChecking;
  397.     CancelKey:=VK_CANCEL;
  398.     MacrosOn;
  399.     RecordKeyMsg.Caption:=RecordKeyMsg.Caption+KeyNames[ToggleRecordKey];
  400.     ScrapMacroKeyMsg.Caption:=ScrapMacroKeyMsg.Caption+KeyNames[Keys[-1]];
  401.     CancelKeyMsg.Caption:=CancelKeyMsg.Caption+KeyNames[CancelKey];
  402.     PauseKeyMsg.Caption:=PauseKeyMsg.Caption+KeyNames[PauseKey];
  403.     StatusBar1.Panels[0].Text:='DLL Version: '+Version;
  404.     If (ParamCount=0) then begin
  405.     {Install some demo code macros}
  406.     Add(MK_CTRLALTC,ScrapMacro,'Run CALC.EXE',RunCalc);
  407.     Add(MK_CTRLSHIFTRBTN,ScrapMacro,'Run NOTEPAD.EXE',RunNotePad);
  408.     Add(MK_CTRLNUMSLASH,ScrapMacro,'Run CLOCK.EXE',RunClock);
  409.     Add(MK_BACKQUOTE,ScrapMacro,'Send keys "{ESC}4{+}5~"',SendKeysProc);
  410.     Add(MK_MBTN,ScrapMacro,'Left mouse double click', DoubleClickLeftButton);
  411.     {$IFDEF BLINDGUY}
  412.     Add(MK_SHIFTUP,ScrapMacro,'Move mouse up',MoveMouseUp);
  413.     Add(MK_SHIFTDOWN,ScrapMacro,'Move mouse down',MoveMouseDown);
  414.     Add(MK_SHIFTLEFT,ScrapMacro,'Move mouse left',MoveMouseLeft);
  415.     Add(MK_SHIFTRIGHT,ScrapMacro,'Move mouse right',MoveMouseRight);
  416.     Add(MK_SHIFTNUM8,ScrapMacro,'Move mouse up',MoveMouseUp);
  417.     Add(MK_SHIFTNUM2,ScrapMacro,'Move mouse down',MoveMouseDown);
  418.     Add(MK_SHIFTNUM4,ScrapMacro,'Move mouse left',MoveMouseLeft);
  419.     Add(MK_SHIFTNUM6,ScrapMacro,'Move mouse right',MoveMouseRight);
  420.     Add(MK_SHIFTHOME,ScrapMacro,'Move mouse to upper left',MoveMouseUpperLeft);
  421.     Add(MK_SHIFTPGUP,ScrapMacro,'Move mouse to upper right',MoveMouseUpperRight);
  422.     Add(MK_SHIFTEND,ScrapMacro,'Move mouse to lower left',MoveMouseLowerLeft);
  423.     Add(MK_SHIFTPGDN,ScrapMacro,'Move mouse to lower right',MoveMouseLowerRight);
  424.     Add(MK_CTRLSHIFTCENTER,ScrapMacro,'Move mouse to screen center',MoveMouseCenter);
  425.     Add(MK_ALTSHIFTENTER,ScrapMacro,'Left mouse click',ClickLeftButton);
  426.     Add(MK_CTRLALTENTER,ScrapMacro,'Left mouse double click', DoubleClickLeftButton);
  427.     Add(MK_CTRLSHIFTM,ScrapMacro,'Magnify pointer',MagnifyPointer);
  428.     Add(MK_CTRLSHIFTS,ScrapMacro,'Shrink pointer',ShrinkPointer);
  429.     {$ENDIF}
  430.     end else begin
  431.        OpenDialog1.FileName:=UpperCase(ParamStr(1));
  432.        ReadFromFile(OpenDialog1.FileName,true);
  433.     end;
  434.     CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
  435.     NumLockButton.Caption:='Num '+OffOn[NumLock];
  436.     ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
  437.   end;
  438. end;
  439.  
  440. procedure TSuperRecorder.MacroSet1Played(Sender: TObject; State: TUserMacroEngineState);
  441. begin
  442.   StatusBar1.Panels[1].Text:=MacroSet1.StateName[State];
  443. end;
  444.  
  445. procedure TSuperRecorder.SaveBtnClick(Sender: TObject);
  446. begin
  447.   If (SaveDialog1.FileName='') and (OpenDialog1.FileName<>'') then
  448.     SaveDialog1.FileName:=OpenDialog1.FileName;
  449.   If (SaveDialog1.Execute) then MacroSet1.SaveToFile(SaveDialog1.FileName);
  450. end;
  451.  
  452. procedure TSuperRecorder.LoadBtnClick(Sender: TObject);
  453. begin
  454.   If (OpenDialog1.Execute) then MacroSet1.ReadFromFile(OpenDialog1.FileName,Merge.Checked);
  455. end;
  456.  
  457. procedure TSuperRecorder.FormClose(Sender: TObject; var Action: TCloseAction);
  458. begin
  459.   MacroSet1.MacrosOff;
  460.   DestroyCursor(BIGPOINT);
  461. end;
  462.  
  463. procedure TSuperRecorder.btCreateCodeMacroClick(Sender: TObject);
  464. begin
  465.   try
  466.     OurWindow:=SuperRecorder.Handle;
  467.     With MacroSet1, MacroKeyComboBox1 do
  468.       If (MKey>0) then Add(MKey,ScrapMacro,edMacroName.Text,ExampleCodeMacroProcedure);
  469.  
  470.   except
  471.   on Exception Do MessageBox(0,'An error occurred while adding the Code Macro','',MB_APPLMODAL);
  472.   end;
  473. end;
  474.  
  475. procedure TSuperRecorder.CancelCheckClick(Sender: TObject);
  476. begin
  477.   MacroSet1.CancelChecking:=CancelCheck.Checked;
  478. end;
  479.  
  480. procedure TSuperRecorder.DeleteBtnClick(Sender: TObject);
  481. begin
  482.   MacroSet1.Delete(MacroSet1.Keys[Pred(StringGrid1.Row)]);
  483. end;
  484.  
  485. procedure TSuperRecorder.MousePointerClick(Sender: TObject);
  486. begin
  487.   If MousePointer.Checked then MacroSet1.MouseBase:=MBPointer;
  488. end;
  489.  
  490. procedure TSuperRecorder.MouseWindowClick(Sender: TObject);
  491. begin
  492.   If MouseWindow.Checked then MacroSet1.MouseBase:=MBWindow;
  493. end;
  494.  
  495. procedure TSuperRecorder.MouseScreenClick(Sender: TObject);
  496. begin
  497.   If MouseScreen.Checked then MacroSet1.MouseBase:=MBScreen;
  498. end;
  499.  
  500. procedure TSuperRecorder.btSendKeysClick(Sender: TObject);
  501. begin
  502.   ActiveControl:=Memo1;
  503.   macroset1.SendKeys(PChar(edSendKeys.Text), True);
  504. end;
  505.  
  506. procedure TSuperRecorder.MacroSet1Assigned(Sender: TObject;
  507.   Macro: Pointer);
  508. var
  509.   MMacs : word;
  510.   MCnt : byte;
  511. begin
  512.   With MacroSet1, StringGrid1 do begin
  513.     RowCount:=2;
  514.     Cells[0,0]:='Hot key';
  515.     Cells[1,0]:='Name';
  516.     Cells[0,1]:='';
  517.     Cells[1,1]:='';
  518.     MMacs:=MaxMacroNum;
  519.     For MCnt:=0 to pred(MMacs) do begin
  520.       try
  521.         Cells[0,Succ(MCnt)]:=KeyNames[Keys[MCnt]];
  522.         Cells[1,Succ(MCnt)]:=Names[Keys[MCnt]];
  523.       except
  524.         on EMacroNotFound Do begin
  525.           {We don't care about not finding our macros};
  526.           Cells[0,Succ(MCnt)]:='UNDEFINED';
  527.           Cells[1,Succ(MCnt)]:='UNDEFINED';
  528.         end;
  529.       end;
  530.       RowCount:=RowCount+1;
  531.     end;
  532.   end;
  533. end;
  534.  
  535. procedure TSuperRecorder.btAppActivateClick(Sender: TObject);
  536. begin
  537.   MacroSet1.AppActivate(edAppActivate.Text);
  538. end;
  539.  
  540. procedure TSuperRecorder.CapsLockButtonClick(Sender: TObject);
  541. begin
  542.   With MacroSet1 do begin
  543.     If CapsLock then CapsLock:=false
  544.     else CapsLock:=true;
  545.     CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
  546.   end;
  547. end;
  548.  
  549. procedure TSuperRecorder.ScrollLockButtonClick(Sender: TObject);
  550. begin
  551.   With MacroSet1 do begin
  552.     If ScrollLock then ScrollLock:=false
  553.     else ScrollLock:=true;
  554.     ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
  555.   end;
  556. end;
  557.  
  558. procedure TSuperRecorder.NumlockButtonClick(Sender: TObject);
  559. begin
  560.   With MacroSet1 do begin
  561.     If NumLock then NumLock:=false
  562.     else NumLock:=true;
  563.     NumLockButton.Caption:='Num '+OffOn[NumLock];
  564.   end;
  565. end;
  566.  
  567. procedure TSuperRecorder.FormActivate(Sender: TObject);
  568. begin
  569.   With MacroSet1 do begin
  570.     CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
  571.     NumLockButton.Caption:='Num '+OffOn[NumLock];
  572.     ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
  573.   end;
  574. end;
  575.  
  576. initialization
  577. end.
  578.